/**
 * 每轮操作，金银铜铁各有一定的概率出现。一共16轮操作
 * 目标是凑齐 4金12铜 或者 4银12铜 或者 16铜
 * 记号 P(金=x,银=y,铜=z) 为概率
 * P(x,y,z) = P(z|x,y) * P(y|x) * P(x)
 * Px显然是二项分布, P(x) = C(16, x) * P金 ^ x * (1 - P金) ^ (16 - x)
 * P(y|x)也是二项分布，但是要使用相应的条件概率
 * P(y|x) = C(16-x, y) * (P银/(1-P金)) ^ y * (1 - P银/(1-P金)) ^ (16 - x - y)
 * P(z|x,y)同理
 * 最后可以算出任意P(x,y,z)
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>
using namespace __gnu_pbds;

using Real = long double;
using llt = long long;
using pii = pair<int, int>;
using vi = vector<int>;
using vvi = vector<vi>;

int const SZ = 17;
array<array<llt, SZ>, SZ> Comb{0LL};
void init(){
    Comb[0][0] = 1;
    for(int i=0;i<SZ;++i){
        Comb[i][0] = Comb[i][i] = 1;
        for(int j=1;j<i;++j){
            Comb[i][j] = Comb[i-1][j-1] + Comb[i-1][j];
        }
    }
    return;
}

int A, B, C;
Real Pa, Pb, Pc;

Real f(int x, int y, int z){
    auto ans = Comb[16][x] * pow(Pa, x) * pow(1 - Pa, 16 - x);
    ans *= Comb[16-x][y] * pow(Pb / (1 - Pa), y) * pow(1 - Pb / (1 - Pa), 16 - x- y);
    ans *= Comb[16-x-y][z] * pow(Pc / (1 - Pa - Pb), z) * pow(1 - Pc / (1 - Pa - Pb), 16-x-y-z);
    return ans;
}

Real proc(){
    if(0 == C) return 0; 
    Pa = A / 16.L;
    Pb = B / 16.L;
    Pc = C / 16.L;
    return f(4, 0, 12) + f(0, 4, 12) + f(0, 0, 16);
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    init();
    int nofkase = 1;
    cin >> nofkase;
    while(nofkase--){
        cin >> C >> B >> A;
        cout << fixed << setprecision(24) << proc() << endl;
    }
    return 0;
}